package com.baizhi.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class GlobalExceptionResolver implements HandlerExceptionResolver {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionResolver.class);

    /**
     * resolveException：当控制器中任意一个方法出现异常时，如果该控制器的方法没有自己异常处理，则会进入当前方法
     * 注意：在异常处理这个方法中，完成自定义异常处理
     * 参数1：request 当前请求对象
     * 参数2：response 当前请求对应响应对象
     * 参数3：handler 当前出现错误的方法对象
     * 参数4：ex 出现异常的异常对象
     * 返回值：modeAndView 模型和试图
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        logger.debug("这是全局异常处理...");
        logger.debug("当前异常：" + ex);
        ModelAndView modelAndView = new ModelAndView();
        // 针对不同异常类型跳转不同页面
        if (ex instanceof UserNotFoundException) {
            modelAndView.setViewName("error");
            return modelAndView;
        }
        modelAndView.setViewName("500");
        return modelAndView;
    }
}
